<?php

/**
 * 
 * Description of class DbPresentielijst
 * Database klassen om presentielijst op te slaan, aan te passen, verwijderen of op te halen.
 * 
 * @version 0.3
 * @author Sander van Belleghem
 * @todo Date controle via de db_controle klassen verwerken ipv de database klassen.
 *  
 * Changelog:
 * 0.3:
 * Functie toegevoegd om de meest recente presentielijst op te halen
 * 0.2:
 * Query's op database niveau uitvoeren ipv applicatie niveau.
 * 
 */
require_once 'class/defs/constants.php';
require_once FILE_DB_DATABASE;
require_once FILE_DB_CONTROLE;

class DbPresentielijst extends Database {

    private $presentielijst_id = '';
    private $toolbox_maand = '';
    private $anders = '';
    private $gehouden_door = '';
    private $datum = '';
    private $onderwerp = '';
    private $locatie = '';
    private $project_id = '';
    private $bijzonderheden = '';
    private $versie_id = '';
    private $controle;

    public function __construct($presentielijst_id = '') {
        //if (DEBUG_LVL & DEBUG_LVL_CLASS) echo __FILE__ . __LINE__ .': ' . __CLASS__ .'<BR/>';

        parent::__construct();
        // Init checks
        $this->controle = new DbControle();

        if (!empty($presentielijst_id)) {
            $this->get($presentielijst_id);
        } else {
            $this->reset();
        }
    }

    private function get($presentielijst_id) {

        $query = mysql_query("SELECT * FROM presentielijst WHERE presentielijst_id = '" . mysql_real_escape_string($presentielijst_id) . "' ORDER BY presentielijst_id DESC LIMIT 1 ");
        if (!$res = mysql_fetch_object($query)) {

            $this->reset();
            throw new Exception("Er is iets mis gegaan tijdens het ophalen van de gegevens.");
        }

        $this->presentielijst_id = $presentielijst_id;
        $this->toolbox_maand = $res->toolbox_maand;
        $this->anders = $res->anders;
        $this->gehouden_door = $res->gehouden_door;
        $this->datum = $this->dutch_date($res->datum);
        $this->onderwerp = $res->onderwerp;
        $this->locatie = $res->locatie;
        $this->project_id = $res->project_id;
        $this->bijzonderheden = $res->bijzonderheden;
        $this->versie_id = $res->versie_id;

        if (DEBUG_LVL & DEBUG_LVL_QUERY)
            echo __FILE__ . ' ' . __LINE__ . ': ' . $query . '<br />';
    }

   /* 
    public function getPresentieById($id = '') {
        if ($id == '') return FALSE;
        
        $return_array ->$result = Array();
        
        // Creeer db object
        $db_presentie = new DbPresentielijst($id);
            
        //$return_array['project_id'] = $db_presentie->getProjectId();
        $return_array['gehouden_door'] = $db_presentie->getGehoudenDoor();
        $return_array['datum'] = $db_presentie->getDatum();
        $return_array['onderwerp'] = $db_presentie->getOnderwerp();
        //$return_array['project_id'] = $db_presentie->getProjectId();
        //$return_array['gehouden_door'] = $db_presentie->getGehoudenDoor();
        
        return $return_array;
        
    }
    
    */
    
       public function selectOverzichtPresentielijst() {

        if ($this->dbquery("SELECT * FROM `presentielijst` LIMIT 0, 100 ")) {
            // Controle of er iets gevonden is in de database
            if ($this->dbNumRows() >= 1) {

                return $this->dbFetchAll();
            } else {
                return false;
            }
        }
       }
    
    private function getNewest() {

        $query = mysql_query("SELECT * FROM presentielijst ORDER BY presentielijst_id DESC LIMIT 1 ");
        if (!$res = mysql_fetch_object($query)) {

            $this->reset();
            throw new Exception("Er is iets mis gegaan tijdens het ophalen van de gegevens.");
        }

        $this->presentielijst_id = $presentielijst_id;
        $this->toolbox_maand = $res->toolbox_maand;
        $this->anders = $res->anders;
        $this->gehouden_door = $res->gehouden_door;
        $this->datum = $this->dutch_date($res->datum);
        $this->onderwerp = $res->onderwerp;
        $this->locatie = $res->locatie;
        $this->project_id = $res->project_id;
        $this->bijzonderheden = $res->bijzonderheden;
        $this->versie_id = $res->versie_id;

        if (DEBUG_LVL & DEBUG_LVL_QUERY)
            echo __FILE__ . ' ' . __LINE__ . ': ' . $query . '<br />';
    }

    public function getAnders() {

        return $this->anders;
    }

    public function getBijzonderheden() {

        return $this->bijzonderheden;
    }

    public function getDatum() {

        return $this->datum;
    }

    public function getGehoudenDoor() {

        return $this->gehouden_door;
    }

    public function getLocatie() {

        return $this->locatie;
    }

    public function getOnderwerp() {

        return $this->onderwerp;
    }

    public function getPresentielijstId() {

        return $this->presentielijst_id;
    }

    public function getProjectId() {

        return $this->project_id;
    }

    public function getToolboxMaand() {

        return $this->toolbox_maand;
    }

    public function getVersieId() {

        return $this->versie_id;
    }

    public function delete() {

        $query = "DELETE FROM presentielijst WHERE presentielijst . presentielijst_id = '" . mysql_real_escape_string($this->presentielijst_id) . "'  LIMIT 1 ";

        if (!$this->dbquery($query)) {
            throw new Exception(DB_ERROR_COULDNOTDELETE);
        }

        if (DEBUG_LVL & DEBUG_LVL_QUERY)
            echo __FILE__ . ' ' . __LINE__ . ': ' . $query . '<br />';

        $this->reset();
    }

    public function save($toolbox_maand, $anders, $gehouden_door, $datum, $onderwerp, $locatie, $project_id, $bijzonderheden, $versie_id) {
        
        if (!empty($toolbox_maand) &&
                !empty($gehouden_door) &&
                $this->controle->CheckDate($datum) &&
                !empty($onderwerp) &&
                !empty($locatie) &&
                $this->controle->checkId($project_id) &&
                $this->controle->checkString($bijzonderheden, TBM_OVERIGEN_MAX_LENGTH, TBM_OVERIGEN_MIN_LENGTH) &&
                $this->controle->checkId($versie_id)) {

            $query = "INSERT INTO presentielijst (presentielijst_id, toolbox_maand, anders, gehouden_door, datum, onderwerp, locatie, project_id, bijzonderheden, versie_id) 
                        VALUES (" . ($this->getLatestId() + 1) . ",
                                '" . mysql_real_escape_string($toolbox_maand) . "', 
                                '" . mysql_real_escape_string($anders) . "', 
                                '" . mysql_real_escape_string($gehouden_door) . "', 
                                '" . $controle->mysql_date($datum) . "', 
                                '" . mysql_real_escape_string($onderwerp) . "',
                                '" . mysql_real_escape_string($locatie) . "',
                                '" . mysql_real_escape_string($project_id) . "',
                                '" . mysql_real_escape_string($bijzonderheden) . "',
                                '" . mysql_real_escape_string($versie_id) . "')";
            if (DEBUG_LVL & DEBUG_LVL_QUERY)
                echo __FILE__ . ' ' . __LINE__ . ': ' . $query . '<br />';

            if (!$this->dbquery($query)) {
                throw new Exception(DB_ERROR_NIETVERWERKT);
            }

            // Udate class attr
            $this->presentielijst_ID = mysql_insert_id();
            $this->toolbox = $toolbox_maand;
            $this->anders = $anders;
            $this->gehouden_door = $gehouden_door;
            $this->datum = $datum;
            $this->onderwerp = $onderwerp;
            $this->locatie = $locatie;
            $this->project_id = $project_id;
            $this->bijzonderheden = $bijzonderheden;
            $this->versie_id = $versie_id;

            return true;
        } else {
            throw new Exception(DB_ERROR_INVOERFOUT);
        }
    }

    public function update($toolbox_maand, $anders, $gehouden_door, $datum, $onderwerp, $locatie, $project_id, $bijzonderheden, $versie_id) {
        if (!empty($toolbox_maand) &&
                !empty($anders) &&
                !empty($gehouden_door) &&
                $this->controle->CheckDate($datum) &&
                !empty($onderwerp) &&
                !empty($locatie) &&
                $this->controle->checkString($bijzonderheden, 40000, 1) &&
                $this->checkId($versie_id, "versie")) {
            
            $this->toolbox_maand = $toolbox_maand;
            $this->anders = "?";
            $this->gehouden_door = $gehouden_door;
            $this->datum = $this->dutch_date($datum);
            $this->onderwerp = $onderwerp;
            $this->locatie = $locatie;
            $this->project_id = $project_id;
            $this->bijzonderheden = $bijzonderheden;
            $this->versie_id = $versie_id;

            $query = "UPDATE presentielijst 
                        SET toolbox_maand = '" . mysql_real_escape_string($toolbox_maand) . "', 
                            anders = '" . mysql_real_escape_string($anders) . "', 
                            gehouden_door = '" . mysql_real_escape_string($gehouden_door) . "', 
                            datum = '" . $this->controle->mysql_date(str_replace("-", "/", $datum)) . "', 
                            onderwerp = '" . mysql_real_escape_string($onderwerp) . "', 
                            locatie = '" . mysql_real_escape_string($locatie) . "', 
                            project_id = '" . mysql_real_escape_string($project_id) . "', 
                            bijzonderheden = '" . mysql_real_escape_string($bijzonderheden) . "', 
                            versie_id = '" . mysql_real_escape_string($versie_id) . "' 
                        WHERE presentielijst . presentielijst_id = '" . mysql_real_escape_string($this->presentielijst_id) . "'";
            if (!$this->dbquery($query)) {
                throw new Exception(DB_ERROR_NIETVERWERKT);
            }

            if (DEBUG_LVL & DEBUG_LVL_QUERY)
                echo __FILE__ . ' ' . __LINE__ . ': ' . $query . '<br />';

            

            return true;
        } else {
            throw new Exception(DB_ERROR_INVOERFOUT);
        }
    }

    private function getLatestId() {
        $query = "SELECT presentielijst_id FROM presentielijst ORDER BY presentielijst_id DESC LIMIT 1";
        if (!$this->dbquery($query)) {
            throw new Exception(DB_ERROR_NIETVERWERKT);
        }
        $result = $this->dbFetchArray();
        if (!$result['presentielijst_id'] == null) {
            return ($result['presentielijst_id']);
        }

        if (DEBUG_LVL & DEBUG_LVL_QUERY)
            echo __FILE__ . ' ' . __LINE__ . ': ' . $query . '<br />';
    }

    private function reset() {

        $this->presentielijst_id = '';
        $this->toolbox_maand = '';
        $this->anders = '';
        $this->gehouden_door = '';
        $this->datum = '';
        $this->onderwerp = '';
        $this->locatie = '';
        $this->project_id = '';
        $this->bijzonderheden = '';
        $this->versie_id = '';
    }

    public function __destruct() {
        parent::__destruct();
    }

    public function dutch_date($param0) {
        
    }

}

class TestDbPresentielijst {

    public function TestDbPresentielijst() {
        try {

            $save = new DbPresentielijst();
            $save->save(15, 2, 'vanBelleghem');

            $update = new DbPresentielijst(1);
            $update->update(5, 16, 'Sander');

            $delete = new DbPresentielijst(1);
            $delete->delete();
        } catch (Exception $e) {
            echo '<pre>';
            echo 'Caught exception: ', $e->getMessage(), "\n";
            echo '</pre>';
        }
    }

}

?>